| dhcpv6_na |bool | 1 | DHCPv6 stateful addressing hands out IA_NA - Internet Address - Network Address |
| dhcpv6_pd |bool | 1 | DHCPv6 stateful addressing hands out IA_PD - Internet Address - Prefix Delegation (PD) |
| dhcpv6_pd_preferred |bool | 0 | Set the DHCPv6-PD Preferred (P) flag in outgoing ICMPv6 RA message PIOs (RFC9762); requires `dhcpv6` and `dhcpv6_pd`. |
-| dhcpv6_pd_min_len |integer| - | Minimum prefix length to delegate with IA_PD (value is adjusted if needed to be greater than the interface prefix length). Range [1,62] |
+| dhcpv6_pd_min_len |integer| - | Minimum prefix length to delegate with IA_PD (value is adjusted if needed to be greater than the interface prefix length). Range [1,64] |
| router |list |`<local address>`| IPv4 addresses of routers on a given subnet (provided via DHCPv4, should be in order of preference) |
| dns |list |`<local address>`| DNS servers to announce, accepts IPv4 and IPv6 |
| dnr |list |disabled| Encrypted DNS servers to announce, `<priority> <domain name> [<comma separated IP addresses> <SvcParams (key=value)>...]` |
#define HOSTID_LEN_MAX 64
#define HOSTID_LEN_DEFAULT HOSTID_LEN_MIN
-#define PD_MIN_LEN_MAX (64-2) // must delegate at least 2 bits of prefix
+#define PD_MIN_LEN_MAX 64
#define OAF_DHCPV6 (OAF_DHCPV6_NA | OAF_DHCPV6_PD)
if ((c = tb[IFACE_ATTR_DHCPV6_PD_MIN_LEN])) {
uint32_t pd_min_len = blobmsg_get_u32(c);
- if (pd_min_len > PD_MIN_LEN_MAX)
- iface->dhcpv6_pd_min_len = PD_MIN_LEN_MAX;
- iface->dhcpv6_pd_min_len = pd_min_len;
- if (pd_min_len > PD_MIN_LEN_MAX)
+
+ if (pd_min_len > PD_MIN_LEN_MAX) {
+ pd_min_len = PD_MIN_LEN_MAX;
warn("Clamped invalid %s value configured for interface '%s' to %d",
- iface_attrs[IFACE_ATTR_DHCPV6_PD_MIN_LEN].name, iface->name, iface->dhcpv6_pd_min_len);
+ iface_attrs[IFACE_ATTR_DHCPV6_PD_MIN_LEN].name, iface->name, pd_min_len);
+ }
+
+ iface->dhcpv6_pd_min_len = pd_min_len;
}
if ((c = tb[IFACE_ATTR_DHCPV6_NA]))